package com.atguigu.gmall.item.rpc;

import com.atguigu.gmall.common.constant.RedisConstant;
import com.atguigu.gmall.common.result.Result;
import com.atguigu.gmall.feign.search.SearchFeignClient;
import com.atguigu.gmall.item.service.SkuDetailService;
import com.atguigu.gmall.model.product.to.SkuDetailTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RequestMapping("/api/inner/item")
@RestController
public class SkuDetailController {
    @Autowired
    SkuDetailService skuDetailService;

    @Autowired
    SearchFeignClient searchFeignClient;

    @Autowired
    StringRedisTemplate stringRedisTemplate;

    @GetMapping("/getSkuDetail/{skuId}")
    public Result<SkuDetailTO> getSkuDetail(@PathVariable Long skuId) {

        //1、查询所有的商品数据
        SkuDetailTO detailTO = skuDetailService.getSkuDetail(skuId);

        //（无需实时统计） 2、热度计数，把计数交给es保存；每次每个商品都更新，ES压力大
        //1）、热度统计： 100
        //2）、批量更新： 热度分每超过100，就更新一次
        // 窗口统计；
        // 1）、时间窗口： 每小时做一次商品分更新
        // 2）、计数窗口： 每统计满100个，把这个商品的最新分数更新一次。


        // sku:info:49
        // sku:hotscore:49
        Long hotScore = stringRedisTemplate.opsForValue().increment(RedisConstant.REDIS_SKU_HOTSORE_KEY + skuId);
        if (hotScore % 100 == 0) {
            searchFeignClient.incrHotScore(skuId, hotScore);
        }
        return Result.ok(detailTO);
    }



}
